今天 HITCON CTF 初賽總算圓滿落幕,預告一下明天最後一天的主題是 HITCON CTF 2019 Quals,會講述這次身為出題人員 on site 的心得,順便聊一下這兩天主辦方的內幕 (?) 今天就先讓我好好思 (ㄅㄨˇ) 考 (ㄇㄧㄢˊ) 要怎麼呈現吧 ... XD
今天主要介紹的是交大的時期的 CTF 歷史,雖然交大在 CTF 的成績上沒有台大優秀,接連誕生 217 和 Balsn 兩隻頂級強隊,但也是曾經輝煌過一段時間
昨天的故事聊到 jeffxx 擔任好幾屆的 程式安全 助教,並設計課堂作業放到 wargame.cs.ncut.edu.tw 讓學生練習 (像是 第二天的例題),某方面來說程式安全這門課程,可以說是 HITCON CTF team 的 pwn 的起源 ...... XD
HITCON CTF team 成員從 DEF CON CTF 回國後,無論是台大還是交大,都覺得雖然僥倖拿了第二名,但有很大的程度是建立在成功在 PPP 的機器上種下後門分走不少分數,只靠當時參賽的 10 人實在太少,難以和國際強隊抗衡,因此決定回台灣之後要開始培育更多 CTF 的戰力出來,台大那邊是開設了 計算機安全,交大這邊則是決定修改原本的程式安全課程,在徵得 黃世昆 老師的同意後,全程由 jeffxx
, atdog
, ddaa
輪流上課,並請 lucas
, Orange
當特邀講師,課程內容全部講述 CTF 相關的實戰技巧,並在課堂中帶同學實際操作,希望以最快速度培育出有辦法在 DEF CON CTF 幫得上忙的戰力出來
不過當時的 CTF 還是一個美好的年代 (?),加上課程是 程式安全,因此只有講述 pwn, reverse, web 三個領域的題目,crypto 和 misc 就沒有提及了,回顧當時的課綱,在現在的計算機安全大概要在兩個星期講完吧......XD
1. Overview
2. Static Analysis (1)
3. Static Analysis (2)
4. Dynamic Analysis (1)
5. Dynamic Analysis (2)
6. Exploit - Command Injection
7. Exploit - Smash the Stack
8. Exploit - Heap Feng Shui
9. Exploit - Format String
10. Exploit - Writing shellcode
11. Mitigation - Stackguard
12. Mitigation - DEP and ASLR
13. Mitigation - Return Oriented Programming
14. Web Exploit (1)
15. Web Exploit (2)
16. Project Presentation (1)
17. Project Presentation (2)
18. Final Exam (join exam with a NTU related course in CTF style)
由於 wargame.cs.nctu.edu.tw 已經瀕臨倒站,而且基於 FreeBSD 的環境也不適合出 CTF 領域常見的 Linux 題目,因此最後決定重新設計一個題目網站
當時 jeffxx 和 atdog 因為正在學習 ruby,討論後決定用當時熱門的 Ruby on Rails 來寫網站,結果因為工作太忙沒時間寫,結果都只有我在寫 QQ
會用 Rails 寫網站不代表 ruby
這件事,現在覺得假如當時有 CTFd 就好了...... XDD網站大概長得像這樣,樸實無華且枯燥...... (汗
可惜的是就結果而言,當時的程式安全修課生,雖然培育了一些實力不錯的成員出來,但最後大部分沒有成功加入 HITCON CTF team QQ 不過倒是釣到兩個非修課生 Lays 和 Angelboy XDD
bruce30262
於第五期加入 HITCON CTF team當年 102 年度的程式安全的期末考,就是之前稍微提過、HITCON CTF Final 的前身、傳說中的 **CTCTF 台交賽,**全稱為台交網路攻防搶旗賽,但跟 ACM 的那個台交賽沒有關係就是了 XD 至今可以看到當時的 網站 .....XD 偉哉中華電,讚嘆中華電
這個念頭是 jeffxx 所發想的,由於受到當時 BCTF 百度盃的啟發,我們覺得要招募更多戰力,勢必得嘗試辦一場 Attack & Defense 的比賽,才可以讓大家真正體會到打 Attack & Defense 的樂趣和困難 XD 與當時台大的助教 seanwu 和 shik 討論後覺得可行,就開始了一系列的計畫,主要由台大負責設計適合放在 A&D 的題目 (Orange 幫忙出了一題 web),交大這邊負責 infrastructure 的設計,包含參賽隊伍要維護和攻擊的 server、網路架構、戰場設計 等等
我主要負責寫 service check 和處理硬體器材的部分,包含 server 和 network 架設
jeffxx 還有其他被抓來幫忙的 CRAX 成員負責寫 scoreboard 和網站
atdog 負責搞定與台大連接的 VPN 和管理 service server 的整個後端系統
Lays 負責戰場系統,原來是 Lays 你自己跳坑的 (茶)
最後冠軍是由台大的隊伍 <(_ _)> shik
獲得 (不過成員裡面沒有 shik,倒是有飛到日本玩的 peter50216
..... XD),第二名也是台大的隊伍,三四名都是交大的隊伍,第三名是 DSNS Lab 組成的隊伍,第四名 NASA 是由 SQLab 的新生和另一個資安 Lab 的成員組隊
<(_ _)> shik
的成員 cebrusfs
與 Lays
同樣於第二期加入 HITCON 團隊,也是當時打 SECCON CTF 的成員之一
fcrh
有幫 HITCON CTF 打過幾次比賽bruce30262
在第三名的隊伍 DSNS Labdavid942j
在第九名的隊伍 wolfcat
,但該隊伍只有兩名成員 QQangelboy
在第十一名的隊伍 I have girls that
,是到進入到隊伍 BambooFox 後打了幾場比賽,之後才加入到 HITCON CTF team,比 Lays 晚一點不過也算二期成員 XD下列是其他 CTF team 的成員:
NCTUCSC
的第一任正副會長 bananapple
和 mangoking
在 第八名隊伍 MagnoHot
NCTUCSC
全稱為 網路安全策進會,是 BambooFox
在交大的正式社團名稱Balsn
成員 ysc
在第十名隊伍 YSTH
HITCON GIRLS
成員 freetsubasa
在第十一名的隊伍 I have girls that
最後讓我們回顧一下當時的 final countdown XD 完整的戰場和戰況在 這裡
於 HITCON CTF 2014 首次出現在世人面前,由於是 HITCON Wargame 首次轉型為 HITCON CTF,並對國際上的優秀隊伍開放報名,眾人感受到了危機因此聯合了 CRAX
、dsns
,並邀請 CSCC
對 HITCON CTF 有興趣的成員一同參加,最後成功獲得了第九名的成績
lsc
撰寫,lsc
是後來 Balsn 的創辦人之一,不過在 2018 年被我們挖到 HITCON CTF team 幫忙當工具人 XD後來 CRAX 和 dsns 的成員就繼續沿用 BamfooFox 作為 CTF 隊伍名稱,持續挑戰國際上的 CTF 比賽,希望能跟 217 分庭抗禮
ROIS
邀請參加海峽盃、羅馬尼亞資安團體 CCSIR.org
邀請參加 DefCamp CTF,還有 HITB CTF Amsterdam 2016後來在 謝續平 教授的支持之下,成立學校社團 網路安全策進會,並定期開授社課給外系對 CTF 有興趣的學生參加
可惜隨著主力成員畢業、開始面臨工作或將重心轉移到 HITCON CTF team 而淡出 BambooFox 的隊伍之後,後來成員的實力沒有提升到足夠應付國際賽水平的強度,漸漸脫離了一線隊伍的行列
近兩年開始與 Balsn
, DoubleSigma
, Kerkeryuan
等隊伍聯合組成隊伍 BFS 進行比賽,於 2018 年以第 22 名的成績打進 DEF CON 25 Final,並於決賽取得第 12 名的成績
在從交大畢業後,我就開始了漫長三年的替代役生涯,把 BamfooFox 的棒子交接給後面的學弟妹,原本期許自己能像 Lucas 或 jeffxx 這樣能在工作之餘給予學弟妹幫助,可惜自己能力有限,無法在兼顧工作的同時,讓自己的技術更進一步,工作之餘的時間只能勉強讓自己的技能不要生疏,但整個 CTF 的發展卻越來越慘無人道 QQ,漸漸開始無法跟上大家的水平,也開始一連串懷疑人生的低潮期
現在研替已經到期,自己終於還完國家債務暫時離工作崗位暫時休息,但也已經不再年輕,需要考慮種種麻煩的大小事,未來大概依然無法像過去般在 CTF 領域全心投入,因此特地在這 30 天挑戰的後幾篇文章回憶這幾年在 CTF 領域的奮鬥,一方面為自己的成長做個見證,也希望避免這些屬於台灣的榮耀未來被人忘記
台灣不像中國大陸那邊有夠多人又有夠多的經費可以搞一個 XCTF 聯賽來源源不斷的培育人才,但我們也會用自己的方式把 CTF 傳承下去,這兩天看著 Balsn 跟世界級強隊爭奪 HITCON CTF 的冠軍,很高興台灣也出了 HITCON 之外的頂級強隊,相信之後 Balsn 也會把自己 CTF 的經驗傳承,培育更多的新血進 CTF (能補充進 HITCON, Balsn 或新的隊伍都好 XD),讓台灣一直會有頂級強隊在 CTF 圈中發光發熱,而曾經輝煌的 HITCON、217 等隊伍就不會被這個圈子給遺忘
starbound 是因為出題者 seanwu 當時沉迷 steam 上的同名遊戲,因此有了這題的誕生 XD 當時有拿這題做成簡報,跟鑽石級贊助商和沛科技交差 (?),也是我唯一一次有機會看到翟本橋本人 XD
這題是 32 bit 的程式 (現在看起來覺得好不習慣阿...),執行起來題目會長的像這樣,每次連上的地形都會變動:
[Info] Landing ...
_______________________________________________
/ Pos: 270 HP: 100 \
| |
| |
| ,__~ |
| ^ .... |
| ,_-.MMM,-....\ |
| ,-....wMw....... |
| /....#..w........ ^ |
|-...........#.....\ /.\ |
|...................`~ /...`_~ |
|..............#...... #......`__~|
|....#................\ ...........|
|............#......... o /...........|
|.......#..............\ T ,_________-..........#.|
|..........#............`~ ........#..............|
|................#........v..#....................|
|.......#...................................@.....|
|.........@.......#...............................|
\_______________________________________________/
-+STARBOUND v1.0+-
0. Exit
1. Info
2. Move
3. View
4. Tools
5. Kill
6. Settings
7. Multiplayer
>
因為是 Attack & Defense 的題目,當時出題者預期是寫了六個漏洞,但比賽開始才發現有一個不能打 XDD,另外還有一個預期外的問題,五個漏洞分別如下:
6. Settings > 2. Name
可以在 bss 段輸入任意內容,因此可以用來偽造 function table,配合 out-of-bound 的問題做到控制 eip6. Settings > 2. Name
在讀取 name 時存在 buffer overflow 的問題,可以蓋掉 menu 的 function pointer1. Info
會讀取 /home/flags/starbound
的內容進行 memfrob()
,當遊戲結束透過 do_send_record()
紀錄分數時,會 leak 出 memfrob()
過後的 flag1. Info
讀取完 flag 之後沒有關閉 fd,加上 7. Multiplayer > 3. Disable
在 close fd 之後不會將 fd reset 成 -1,可以讓 7. Multiplayer > 4. Teleport
使用的 fd 實際上是 read flag 的 fd,就可將 flag 透過 teleport 的功能送出
lseek
回文件開頭導致此問題 XD7. Multiplayer
是透過 udp 實作,而 7. Multiplayer > 4. Teleport
是接收到 \n
當作是結束,可以在 7. Multiplayer > 5. Share Your Coordinate
的時候直接切斷 connection,讓 getline 不會收到換行,馬上再做一次連線,因為是 udp 可以繼續傳輸,而 recv 方就會收到超出預期的的長度發生 overflow不能打的漏洞和預期外的問題分別是:
do_die()
函式,原本設計了 format string 的漏洞,但編譯時忘記開啟了 FORTIFY 的保護,導致此功能只剩下 leak 的作用,但 leak 完就 exit 結束因此沒什麼用 XD